/**
 * @file dbpersonne.c
 * @brief Fichier source du module dbpersonne.
 *
 * @author Delory Rachid, Keita Mamadou, Bernard Florian
 */

/* *********************************************************************

                       Librairies de label                          

********************************************************************* */

#include "dbpersonne.h"


/* *********************************************************************

                        Fonctions                                      

********************************************************************* */

void recuperation_DPer(Ensemble *ePersonne, const int id, const int type)
{
  if(ePersonne)
    {
      DataBase data;
      ouvrir_Db();
      if(type == TOUS_DPER)
	{
	  prepare_Db(&data, "select rowid, ID_pays, Nom, Prenom, NomScene, DateNaissance, LieuxNaissance, dateDeces, Site, Biographie from personne");
	}
      else if(type == SEUL_DPER)
	{
	  prepare_Db(&data, "select rowid, id_pays, nom, prenom, nomscene, datenaissance, lieuxnaissance, datedeces, site, biographie from personne where rowid = ?");
	  bindValueInt_Db(&data, 1, id);
	}
      
      while(execute_Db(&data))
	{
	  
	  Personne per;
	  Date *date = NULL;
	  Pays *pays = NULL;
	  int idRec;
	  init_Per(&per);
	  
	  setId_Per(&per, getValueInt_Db(&data,0));
	  
	  idRec = getValueInt_Db(&data, 1);
	  recuperation_DPay(&pays, idRec);
	  setPays_Per(&per, pays);
	  detruire_Pay(&pays);
	  setNom_Per(&per, getValueText_Db(&data,2));
	  setPrenom_Per(&per, getValueText_Db(&data,3));
	  setNomScene_Per(&per, getValueText_Db(&data,4));

	  idRec = getValueInt_Db(&data, 5);
	  recuperation_DDat(&date, idRec);
	  setDateNaissance_Per(&per, date);
	  detruire_Dat(&date);

	  setLieuxNaissance_Per(&per, getValueText_Db(&data,6));

	  idRec = getValueInt_Db(&data, 7);
	  recuperation_DDat(&date, idRec);
	  setDateDeces_Per(&per, date);
	  detruire_Dat(&date);

	  setSite_Per(&per, getValueText_Db(&data,8));
	  setBiographie_Per(&per, getValueText_Db(&data,9));

	  insert_Ens(ePersonne, &per, creer_Per, copier_Per);
	  
	  liberer_Per(&(per));
	  
	}
      finalise_Db(&data);
    }
}

void recuperationOeuvre_DPer(Personne **personne, const int id)
{
  if((*personne) == NULL)
    (*personne) = creer_Per();
  if(id > 0)
    {
      DataBase data;
      ouvrir_Db();

      prepare_Db(&data, "select rowid, ID_pays, Nom, Prenom, NomScene, DateNaissance, LieuxNaissance, dateDeces, Site, Biographie from personne where rowid = ?");
      bindValueInt_Db(&data, 1, id);
      if(execute_Db(&data))
	{
	  int idRec;
	  Pays *pays = NULL;
	  Date *date = NULL;
	  setId_Per((*personne), getValueInt_Db(&data,0));
	  
	  idRec = getValueInt_Db(&data, 1);
	  recuperation_DPay(&pays, idRec);
	  setPays_Per((*personne), pays);
	  detruire_Pay(&pays);
	  
	  setNom_Per((*personne), getValueText_Db(&data,2));
	  setPrenom_Per((*personne), getValueText_Db(&data,3));
	  setNomScene_Per((*personne), getValueText_Db(&data,4));

	  idRec = getValueInt_Db(&data, 5);
	  recuperation_DDat(&date, idRec);
	  setDateNaissance_Per((*personne), date);
	  detruire_Dat(&date);

	  setLieuxNaissance_Per((*personne), getValueText_Db(&data,6));

	  idRec = getValueInt_Db(&data, 7);
	  recuperation_DDat(&date, idRec);
	  setDateDeces_Per((*personne), date);
	  detruire_Dat(&date);

	  setSite_Per((*personne), getValueText_Db(&data,8));
	  setBiographie_Per((*personne), getValueText_Db(&data,9));
	}
      finalise_Db(&data);
    }
      
}

void insertion_DPer(Personne *personne)
{
  if(personne)
    {
      DataBase data;
      insertion_DPay(getPays_Per(personne));
      insertion_DDat(getDateNaissance_Per(personne));
      insertion_DDat(getDateDeces_Per(personne));
      if(getId_Per(personne) == 0)
	{
	  prepare_Db(&data, "insert into personne (ID_pays, Nom, Prenom, NomScene, DateNaissance, LieuxNaissance, dateDeces, Site, Biographie) values (?, ?, ?, ?, ?, ?, ?, ?, ?)");
	}
      else
	{
	  if(getMaj_Per(personne) == 1)
	    {
	      prepare_Db(&data, "update personne set ID_pays = ?, Nom = ?, Prenom = ?, NomScene = ?, DateNaissance = ?, LieuxNaissance = ?, dateDeces = ?, Site = ?, Biographie = ? where rowid = ?");
	      bindValueInt_Db(&data, 10, getId_Per(personne));
	    }
	}
      if(getId_Per(personne) == 0 || getMaj_Per(personne) == 1)
	{
	  bindValueInt_Db(&data, 1, getId_Pay(getPays_Per(personne)));
	  bindValueText_Db(&data, 2, getNom_Per(personne));
	  bindValueText_Db(&data, 3, getPrenom_Per(personne));
	  bindValueText_Db(&data, 4, getNomScene_Per(personne));
	  bindValueInt_Db(&data, 5, getId_Dat(getDateNaissance_Per(personne)));
	  bindValueText_Db(&data, 6, getLieuxNaissance_Per(personne));
	  bindValueInt_Db(&data, 7, getId_Dat(getDateDeces_Per(personne)));
	  bindValueText_Db(&data, 8, getSite_Per(personne));
	  bindValueText_Db(&data, 9, getBiographie_Per(personne));
	  if(execute_Db(&data))
	    {

	    }
	  finalise_Db(&data);
	}
      if(getId_Per(personne) == 0)
	{
	  prepare_Db(&data, "select max(rowid) from personne");
	  if(execute_Db(&data))
	    {
	      setId_Per(personne, getValueInt_Db(&data, 0));
	    }
	  finalise_Db(&data);
	}
    }
}

void suppression_DPer(const int id)
{
  if(id > 0)
    {
      DataBase data;
      ouvrir_Db();
      prepare_Db(&data, "delete from personne where rowid = ?");
      bindValueInt_Db(&data, 1, id);
      if(execute_Db(&data))
	{

	}
      finalise_Db(&data);
      prepare_Db(&data, "delete from activite where id_personne = ?");
      bindValueInt_Db(&data, 1, id);
      if(execute_Db(&data))
	{

	}
      finalise_Db(&data);
    }
}
